home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Resources / Developers / XAMPP 1.5.4 / Windows installer / xampp-win32-1.5.4-installer.exe / xampp / phpMyAdmin / lang / sync_lang.sh < prev    next >
Encoding:
Linux/UNIX/POSIX Shell Script  |  2005-12-07  |  7.7 KB  |  282 lines

  1. #!/bin/sh
  2. # $Id: sync_lang.sh,v 2.22 2005/12/07 23:03:46 nijel Exp $
  3. ##
  4. # Shell script that synchronises all translations in phpMyAdmin
  5. ##
  6. # Any parameters (except --iconv/--recode) will be passed to grep to filter
  7. # processed translation, for example: './sync_lang.sh czech' will process only
  8. # czech translation, './sync_lang.sh -e czech -e english' will process czech
  9. # and english translations.
  10. ##
  11. # Written by Michal Cihar <nijel at users.sourceforge.net>
  12. ##
  13. # Changes:
  14. # 2005-12-08
  15. #   * less verbose output to allow quick overview
  16. # 2005-11-29
  17. #   * hack for multibyte chars, so that \'; at the end will not fool PHP
  18. # 2004-09-22
  19. #   * default to iconv, as it doesn't break things as recode does
  20. # 2004-09-03
  21. #   * hack for hebrew
  22. # 2003-11-18
  23. #   * switch php3 -> php
  24. # 2003-04-14
  25. #   * convert only files that are needed to convert (checks mtime), --force to
  26. #     avoid this checking
  27. #   * get charset from filename when reading from file failed
  28. #   * report failed translations at the end
  29. # 2002-09-18
  30. #   * now accepts parameters --iconv/--recode for specifying which convertor
  31. #     to use
  32. # 2002-08-13
  33. #   * support for synchronisation only for selected language(s)
  34. # 2002-07-18
  35. #   * can exclude some languages from conversion
  36. # 2002-07-17
  37. #   * support for multiple convertors (recode added)
  38. ##
  39.  
  40. ##
  41. # convertor setup
  42. ##
  43. # CONVERTOR_PARAMS is used for printf and it also receives two params: source
  44. # and target charset
  45. #
  46.  
  47. case "$1" in
  48.     --iconv)
  49.         echo Using iconv on user request
  50.         CONVERTOR=iconv
  51.         # the space on following is REQUIRED
  52.         CONVERTOR_PARAMS=" -f %s -t %s"
  53.         shift
  54.         ;;
  55.     --recode)
  56.         echo Using recode on user request
  57.         echo '(please use iconv for arabic)'
  58.         CONVERTOR=recode
  59.         CONVERTOR_PARAMS=" -f %s..%s"
  60.         shift
  61.         ;;
  62.     *)
  63.         echo Using iconv as default, force with --iconv/--recode
  64.         CONVERTOR=iconv
  65.         # the space on following is REQUIRED
  66.         CONVERTOR_PARAMS=" -f %s -t %s"
  67.         ;;
  68. esac
  69.  
  70. if [ "$1" = "--force" ] ; then
  71.     FORCE=1
  72.     shift
  73. else
  74.     FORCE=0
  75. fi
  76.  
  77.  
  78. ##
  79. # names of translations to process
  80. ##
  81. # Here should be listed all translations for which conversion should be done.
  82. # The name is filename without inc.php.
  83. #
  84. BASE_TRANSLATIONS="afrikaans-iso-8859-1
  85. albanian-iso-8859-1
  86. arabic-windows-1256
  87. azerbaijani-iso-8859-9
  88. basque-iso-8859-1
  89. belarusian_cyrillic-windows-1251
  90. belarusian_latin-utf-8
  91. bosnian-windows-1250
  92. brazilian_portuguese-iso-8859-1
  93. bulgarian-utf-8
  94. catalan-iso-8859-1
  95. chinese_traditional-utf-8
  96. chinese_simplified-gb2312
  97. croatian-iso-8859-2
  98. czech-utf-8
  99. danish-iso-8859-1
  100. dutch-iso-8859-1
  101. english-iso-8859-1
  102. estonian-iso-8859-1
  103. finnish-iso-8859-1
  104. french-iso-8859-1
  105. galician-iso-8859-1
  106. german-utf-8
  107. greek-iso-8859-7
  108. hebrew-iso-8859-8-i
  109. hungarian-iso-8859-2
  110. indonesian-iso-8859-1
  111. italian-iso-8859-1
  112. japanese-utf-8
  113. korean-euc-kr
  114. latvian-windows-1257
  115. lithuanian-windows-1257
  116. malay-iso-8859-1
  117. norwegian-iso-8859-1
  118. persian-windows-1256
  119. polish-iso-8859-2
  120. portuguese-iso-8859-1
  121. romanian-iso-8859-1
  122. russian-windows-1251
  123. serbian_cyrillic-windows-1251
  124. serbian_latin-windows-1250
  125. slovenian-iso-8859-2
  126. slovak-iso-8859-2
  127. spanish-iso-8859-1
  128. swedish-iso-8859-1
  129. tatarish-iso-8859-9
  130. thai-tis-620
  131. turkish-utf-8
  132. ukrainian-windows-1251"
  133.  
  134. ##
  135. # which translations should not be translated to utf-8
  136. ##
  137. # List here any translation that should not be converted to utf-8. The name is
  138. # same as above.
  139. #
  140. IGNORE_UTF=""
  141.  
  142. ##
  143. # which translations should not be automatically generated
  144. ##
  145. # List here any translation should not be automatically generated from base
  146. # translation for that language (usually for those which are not correctly
  147. # supported by convertor).
  148. #
  149. IGNORE_TRANSLATIONS="
  150. russian-cp-866"
  151.  
  152. ##
  153. # end of configuration, you hopefully won't need to edit anything bellow
  154. ##
  155.  
  156. TEMPFILE=`mktemp /tmp/pma-sync-lang.XXXXXX`
  157.  
  158. cleanup() {
  159.     rm -f $TEMPFILE
  160. }
  161.  
  162. trap cleanup INT ABRT TERM
  163.  
  164. FAILED=""
  165.  
  166. echo "-------------------------------------------------------------------"
  167. # go through all file we should process
  168. for base in $BASE_TRANSLATIONS ; do
  169.     if [ "$#" -gt 0 ] ; then
  170.         if ( echo $base | grep -q "$@" ) ; then
  171.             true
  172.         else
  173.             continue
  174.         fi
  175.     fi
  176.     # grep language from basename
  177.     lang=$(echo $base|sed 's%-.*%%')
  178.     # which files will we create from current?
  179.     create_files=$(ls --color=none -1 $lang*.inc.php|grep -v $base.inc.php)
  180.  
  181.     for ignore in $IGNORE_TRANSLATIONS ; do
  182.         create_files=$(echo "$create_files" | grep -v $ignore)
  183.     done
  184.  
  185.     # charset of source file
  186.     src_charset=$(grep '\$charset' $base.inc.php | sed "s%^[^'\"]*['\"]\\([^'\"]*\\)['\"][^'\"]*$%\\1%")
  187.     replace_charset=$src_charset
  188.     # special case for hebrew
  189.     if [ $src_charset = 'iso-8859-8-i' ] ; then
  190.         src_charset=iso-8859-8
  191.     fi
  192.     echo -n "$base [charset $src_charset]"
  193.  
  194.     # do we already have utf-8 translation?
  195.     if [ $src_charset = 'utf-8' ] ; then
  196.         is_utf=yes
  197.     else
  198.         is_utf=no
  199.     fi
  200.  
  201.     # at first update existing translations
  202.     for file in $create_files ; do
  203.         # charset of destination file
  204.  
  205.         # grepping from file causes problems when it is empty...
  206.         charset=$(grep '\$charset' $file | sed "s%^[^'\"]*['\"]\\([^'\"]*\\)['\"][^'\"]*$%\\1%")
  207.         if [ -z "$charset" ] ; then
  208.             charset=$(echo $file | sed -e 's/^[^-]*-//' -e 's/\.inc\.php\?$//')
  209.         fi
  210.  
  211.         if [ $charset = 'utf-8' ] ; then
  212.             is_utf=yes
  213.         fi
  214.  
  215.         # check whether we need to update translation
  216.         if [ ! "$base.inc.php" -nt "$file" -a "$FORCE" -eq 0 -a -s "$file" ] ; then
  217.             echo -n " ($file:ok)"
  218.             continue
  219.         fi
  220.  
  221.         echo -n " ($file:to $charset:"
  222.         if [ $charset = 'utf-8' ] ; then
  223.             # if we convert to utf-8, we should add allow_recoding
  224.             is_utf=yes
  225.             $CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed -e "s/$replace_charset/$charset/" -e '/\$charset/a\
  226. $allow_recoding = TRUE;' > $TEMPFILE
  227.         elif [ $src_charset = 'utf-8' ] ; then
  228.             is_utf=yes
  229.             # if we convert from utf-8, we should remove allow_recoding
  230.             $CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| grep -v allow_recoding | sed "s/$replace_charset/$charset/" > $TEMPFILE
  231.         else
  232.             # just convert
  233.             $CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed "s/$replace_charset/$charset/" > $TEMPFILE
  234.         fi
  235.         if [ -s $TEMPFILE ] ; then
  236.             sed "s/\\\\';[[:space:]]*$/\\\\\\\\';/" $TEMPFILE > $file
  237.             echo -n 'done)'
  238.         else
  239.             FAILED="$FAILED $file"
  240.             echo -n 'FAILED)'
  241.         fi
  242.     done
  243.  
  244.     # now check whether we found utf-8 translation
  245.     if [ $is_utf = no ] ; then
  246.         if ( echo $IGNORE_UTF | grep -q $base ) ; then
  247.             # utf-8 should not be created
  248.             true
  249.         else
  250.             # we should create utf-8 translation
  251.             charset=utf-8
  252.             file=$lang-$charset.inc.php
  253.             echo -n " [$file:$charset:"
  254.             $CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed -e "s/$replace_charset/$charset/" -e '/\$charset/a\
  255. $allow_recoding = TRUE;' > $TEMPFILE
  256.             if [ -s $TEMPFILE ] ; then
  257.                 cat $TEMPFILE > $file
  258.                 echo -n 'done)'
  259.             else
  260.                 FAILED="$FAILED $file"
  261.                 echo -n 'FAILED)'
  262.             fi
  263.         fi
  264.     fi
  265.     echo
  266. done
  267.  
  268. echo "-------------------------------------------------------------------"
  269.  
  270. if [ -z "$FAILED" ] ; then
  271.     echo "Everything seems to went okay"
  272. else
  273.     echo "!!!SOME CONVERSION FAILED!!!"
  274.     echo "Following file were NOT updated:"
  275.     echo
  276.     echo "$FAILED"
  277.     echo
  278.     echo "!!!SOME CONVERSION FAILED!!!"
  279. fi
  280.  
  281. cleanup
  282.